#include "dist.h"

#include <iostream>
#include <valarray>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>

void simi::normalize(std::vector<std::string> files) {
  using namespace std;

  string buff;
  istringstream line;

  // Pour chaque fichier
  for(vector<string>::iterator file (files.begin()); file < files.end(); ++file) {
    cout << "On normalise le fichier : " << *file << endl;

    ifstream is (file->c_str());
    ofstream os ((*file+".norm").c_str());

    // On recopie l'entête des fichiers
    for(int j = 0; j < 2; ++j) {
      getline(is, buff);
      os << buff << endl;
    }

    // Pour chaque ligne
    while(getline(is, buff)) {
      line.clear();
      line.str(buff);

      // On recopie les 5 premières valeurs
      double val;
      for(int j = 0; j < 5; ++j) {
        line >> val;
        os << val << ' ';
      }

      // On stock le vecteur sift
      valarray<int> sift (128);
      int v;
      for(int i = 0; i < 128; ++i) {
        line >> v;
        sift[i] = v;
      }
      const int sum = sift.sum();

      // On écris le vecteur sift normalisé
      // dans le fichier de sortie
      for(int j = 0; j < sift.size(); ++j) {
        os << setprecision(7) << (double(sift[j])*NORM)/sum;
        if (j == sift.size() -1) {
          os << endl;
        } else {
          os << ' ';
        }
      }
    }
    // On libère les resources
    is.close();
    os.close();
  }
}
